package cn.kent.base.threadLocal;

/**
 * InheritableThreadLocal解决了子线程可以获取主线程的本地变量副本
 *
 * 子线程可以获取父线程的本地变量副本
 *
 * 应用：
 * 1. 子线程需要获取存放在threadLocal中的用户登录信息
 * 2. 一些中间件需要把triceId整个调用链路记载下来
 *
 * 子线程使用父线程中的threadLocal有很多方式，->
 * 第一种： 比如创建子线程的时候将父线程的threadLocal变量传入，并将其复制到子线程中；
 * 第二种： 或者在父线程中构建一个map作为参数传递给子线程，
 * 但是这些方式改变了我们的使用习惯，所以还是使用InheritableThreadLocal吧。
 */
public class InheritableThreadLocalTest {
    private static ThreadLocal<String> threadLocal = new InheritableThreadLocal<String>();
    public static void main(String[] args) {
        threadLocal.set("main localVariable");

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                String s = threadLocal.get();
                System.out.println(s);
            }
        });
        thread.start();

        System.out.println();
    }
}
